/****************************************************
 * A generic MCU FLASH 
 * Copyright (C) 2018 Geno <gcs2508@163.com>
 *
 * 文件名称: sysflash.c
 * 参  考: FLASH.c
 * 摘  要：flash 操作
 * 当前版本: 1.0
 * 作  者: Geno
 ****************************************************/
#ifndef _HK32C030_SYSTEM_FLASH_H__
#define _HK32C030_SYSTEM_FLASH_H__

#include <stdint.h>
#include "hk32c030xx_flash.h"

#define FMC_PAGE_SIZE           ((uint16_t)0x100)

/**
 * @brief flash 写操作
 * @param start_addr [in] 起始flash 地址
 * @param data [in] 写入的数据
 * @param size [in] 写入数据的个数
 * @return 0: 写入成功，-1：写入失败
 ***/
int flash_program(uint32_t start_addr,uint32_t *data,uint16_t size);

/**
 * @brief crc 数据校验
 * @param start_addr [in] 起始flash 地址
 * @param size [in] 校验的数据个数
 * @param crc_value [in] 校验的crc 和
 * @return 0:相同，其他：不同
 ***/
int crc_flash(uint32_t start_addr,uint32_t size,uint16_t crc_value);

/**
 * @brief 擦除的flash 页
 * @param page_num [in] 第几页
 * @param page_count [in] 页的数量
 ***/
void erase_page(uint16_t page_num, uint16_t page_count);

/**
 * @brief 读取flash 数据
 * @param address [in] 其实地址
 * @param data [out] 读取的数据
 * @param data_num [in] 数据个数
 ***/
void read_flash(uint32_t address, uint8_t *data, uint8_t data_num);


#endif //_HK32C030_SYSTEM_FLASH_H__
